package com.changgou.goods.service;

import com.changgou.goods.pojo.Goods;
import com.changgou.goods.pojo.Spu;
import com.github.pagehelper.Page;

import java.util.List;
import java.util.Map;

public interface SpuService {

    /***
     * 查询所有
     * @return
     */
    List<Spu> findAll();

    /**
     * 根据ID查询
     * @param id
     * @return
     */
    Spu findById(String id);

    /***
     * 新增
     * @param goods
     */
    void add(Goods goods);

    /***
     * 修改
     * @param goods
     */
    void update(Goods goods);

    /***
     * 删除,进行逻辑删除
     *      将isDelete字段设置为1,代表已删除.
     * @param id
     */
    void delete(String id);

    /***
     * 多条件搜索
     * @param searchMap
     * @return
     */
    List<Spu> findList(Map<String, Object> searchMap);

    /***
     * 分页查询
     * @param page
     * @param size
     * @return
     */
    Page<Spu> findPage(int page, int size);

    /***
     * 多条件分页查询
     * @param searchMap
     * @param page
     * @param size
     * @return
     */
    Page<Spu> findPage(Map<String, Object> searchMap, int page, int size);


    /***
     * 根据商品ID查询组合实体类Goods
     * @param id
     * @return
     */
    Goods findGoodsById(String id);


    /***
     * 根据spuId进行商品审核
     *      如果当前商品已经被删除,(isDelete字段为1),抛出异常
     *      修改status状态为1,代表已审核.
     *      修改isMarketable状态为1,代表已上架
     * @param id
     */
    void audit(String id);


    /***
     * 根据spuId进行商品的下架操作
     *      如果当前商品已经被删除,(isDelete字段为1),抛出异常
     *      修改isMarketable状态为0,代表下架
     * @param id
     */
    void pull(String id);


    /**
     * 根据spuId进行商品的上架操作
     *      判断商品是否已审核,未审核状态是不能上架的.
     * @param id
     */
    void put(String id);


    /***
     * 恢复逻辑删除的商品
     *      如果商品未删除,是不能回复数据的.
     * @param id
     */
    void restore(String id);


    /***
     * 物理删除
     *      如果当前商品是未删除的状态,则无法进行屋里删除操作.
     * @param id
     */
    void realDelete(String id);
}
